package com.af.iCar;

import android.os.Bundle;
import android.app.Activity;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;

// Classe da base de dados
import com.af.iCar.R;
import com.af.iCar.utils.DataBaseManager;

public class iCar extends Activity implements OnClickListener
{
    public boolean resp = false;
    private Button btPrimeiro = null;
    private Button btAnterior = null;
    private Button btInclui = null;
    private Button btAltera = null;
    private Button btExclui = null;
    private Button btProximo = null;
    private Button btUltimo = null;
    private Button btAtualiza = null;
    private EditText etNome = null;
    private EditText etTelefone = null;
    private EditText etEmail = null;
    private EditText etEndereco = null;
    private Button btOk = null;
    private Button btCancelar = null;
    //SQL default
    private final String dropTableVeiculosSQL = "DROP TABLE veiculos;";
    private final String createTableVeiculosSQL =
        "CREATE TABLE veiculos("
            + "id integer primary key autoincrement, "
            + "veiculo text not null, "
            + "combustivel text not null, "
            + "capacidade_tanque text not null);";
    private final String dropTableVeiculosViagensSQL = "DROP TABLE veiculos_viagens;";
    private final String createTableVeiculosViagensSQL =
        "CREATE TABLE veiculos_viagens("
            + "id integer primary key autoincrement, "
            + "veiculo_id integer not null, "
            + "km_inicial integer not null, "
            + "km_final integer, "
            + "combustivel_inicial float not null, "
            + "combustivel_final float);";
    
    private SQLiteDatabase db_veiculos = null;
    private SQLiteDatabase db_viagens = null;
    
    private Cursor cur_veiculos = null;
    private Cursor cur_viagens = null;
    private char operacao = 'I';

    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_icar);

        iniciaComponentes();
        // travaCampos();

        db_veiculos = new DataBaseManager(this, "veiculos", 2, createTableVeiculosSQL, dropTableVeiculosSQL).getWritableDatabase();
        db_viagens = new DataBaseManager(this, "viagens", 2, createTableVeiculosViagensSQL, dropTableVeiculosViagensSQL).getWritableDatabase();

        atualizaDados();
        if ( cur_veiculos.moveToFirst() )
        {
            mostraDados();
        }
    }

    public void onClick(View v)
    {
        switch ( v.getId() )
        {
            case R.id.btPrimeiro:
                if ( cur_veiculos.moveToFirst() )
                {
                    mostraDados();
                }
                break;

            case R.id.btAnterior:
                if ( cur_veiculos.moveToPrevious() )
                {
                    mostraDados();
                }
                break;

            case R.id.btInclui:
                insereDados();
                break;

            case R.id.btAltera:
                alteraDados();
                break;

            case R.id.btExclui:
                excluiDados();
                break;

            case R.id.btProximo:
                if ( cur_veiculos.moveToNext() )
                {
                    mostraDados();
                }
                break;

            case R.id.btUltimo:
                if ( cur_veiculos.moveToLast() )
                {
                    mostraDados();
                }
                break;

            case R.id.btAtualiza:
                atualizaDados();
                if ( cur_veiculos.moveToFirst() )
                {
                    mostraDados();
                }
                break;

            case R.id.btOk:
                botaoOk();
                // travaCampos();
                mostraManutencao();
                ocultaOkCancelar();
                break;

            case R.id.btCancelar:
                // travaCampos();
                mostraManutencao();
                ocultaOkCancelar();
                break;

            default:
                break;
        }

    }

    public void botaoOk()
    {
        ContentValues dados = new ContentValues();
        dados.put("veiculo", etTelefone.getText().toString());
        dados.put("combustivel", etEmail.getText().toString());
        dados.put("capacidade_tanque", etEndereco.getText().toString());
        if ( operacao == 'I' )
        {
            db_veiculos.insert("veiculos", null, dados);
            atualizaDados();
            if ( cur_veiculos.moveToLast() )
            {
                mostraDados();
            }
        }
        else
        {
            String registroAtual = cur_veiculos.getString(0);
            db_veiculos.update("veiculos", dados, "id=?", new String[]
                {
                    registroAtual
                });
            atualizaDados();
            if ( cur_veiculos.moveToFirst() )
            {
                mostraDados();
            }
        }

    }

    public void excluiDados()
    {
        String registroAtual = cur_veiculos.getString(0);
        db_veiculos.delete("veiculos", "id=?", new String[]
            {
                registroAtual
            });
        atualizaDados();
        if ( cur_veiculos.moveToFirst() )
        {
            mostraDados();
        }
    }

    public void atualizaDados()
    {
        cur_veiculos = db_veiculos.query("veiculos", new String[]
            {
                "id", "veiculo", "combustivel", "capacidade_tanque"
            }, null, null, null, null, null, null);

        cur_viagens = db_veiculos.query("veiculos_viagens", new String[]
            {
                "id", "veiculo_id", "km_inicial", "km_final", "combustivel_inicial", "combustivel_final"
            }, null, null, null, null, null, null);
    }

    public void travaCampos()
    {
        etNome.setClickable(false);
        etNome.setFocusable(false);

        etTelefone.setClickable(false);
        etTelefone.setFocusable(false);

        etEmail.setClickable(false);
        etEmail.setFocusable(false);

        etEndereco.setClickable(false);
        etEndereco.setFocusable(false);
    }

    public void liberaCampos()
    {
        etNome.setClickable(true);
        etNome.setFocusable(true);

        etTelefone.setClickable(true);
        etTelefone.setFocusable(true);

        etEmail.setClickable(true);
        etEmail.setFocusable(true);

        etEndereco.setClickable(true);
        etEndereco.setFocusable(true);
    }

    private void ocultaManutencao()
    {
        btPrimeiro.setVisibility(View.INVISIBLE);
        btAnterior.setVisibility(View.INVISIBLE);
        btInclui.setVisibility(View.INVISIBLE);
        btAltera.setVisibility(View.INVISIBLE);
        btExclui.setVisibility(View.INVISIBLE);
        btProximo.setVisibility(View.INVISIBLE);
        btUltimo.setVisibility(View.INVISIBLE);
        btAtualiza.setVisibility(View.INVISIBLE);
    }

    private void mostraManutencao()
    {
        btPrimeiro.setVisibility(View.VISIBLE);
        btAnterior.setVisibility(View.VISIBLE);
        btInclui.setVisibility(View.VISIBLE);
        btAltera.setVisibility(View.VISIBLE);
        btExclui.setVisibility(View.VISIBLE);
        btProximo.setVisibility(View.VISIBLE);
        btUltimo.setVisibility(View.VISIBLE);
        btAtualiza.setVisibility(View.VISIBLE);
    }

    private void mostraOkCancelar()
    {
        btOk.setVisibility(View.VISIBLE);
        btCancelar.setVisibility(View.VISIBLE);
    }

    private void ocultaOkCancelar()
    {
        btOk.setVisibility(View.INVISIBLE);
        btCancelar.setVisibility(View.INVISIBLE);
    }

    public void mostraDados()
    {
        etNome.setText(cur_veiculos.getString(1));
        etTelefone.setText(cur_veiculos.getString(2));
        etEmail.setText(cur_veiculos.getString(3));
        etEndereco.setText(cur_veiculos.getString(4));
    }

    public void insereDados()
    {
        liberaCampos();
        ocultaManutencao();
        mostraOkCancelar();
        operacao = 'I';
        etNome.setText("");
        etTelefone.setText("");
        etEmail.setText("");
        etEndereco.setText("");

        etNome.requestFocus();
    }

    public void alteraDados()
    {
        liberaCampos();
        ocultaManutencao();
        mostraOkCancelar();
        operacao = 'A';
        etNome.requestFocus();
    }

    public void iniciaComponentes()
    {
        btPrimeiro = (Button) ( findViewById(R.id.btPrimeiro) );
        btPrimeiro.setOnClickListener(this);

        btAnterior = (Button) ( findViewById(R.id.btAnterior) );
        btAnterior.setOnClickListener(this);

        btInclui = (Button) ( findViewById(R.id.btInclui) );
        btInclui.setOnClickListener(this);

        btAltera = (Button) ( findViewById(R.id.btAltera) );
        btAltera.setOnClickListener(this);

        btExclui = (Button) ( findViewById(R.id.btExclui) );
        btExclui.setOnClickListener(this);

        btProximo = (Button) ( findViewById(R.id.btProximo) );
        btProximo.setOnClickListener(this);

        btUltimo = (Button) ( findViewById(R.id.btUltimo) );
        btUltimo.setOnClickListener(this);

        btAtualiza = (Button) ( findViewById(R.id.btAtualiza) );
        btAtualiza.setOnClickListener(this);

        etNome = (EditText) ( findViewById(R.id.etNome) );
        etTelefone = (EditText) ( findViewById(R.id.etTelefone) );
        etEmail = (EditText) ( findViewById(R.id.etEmail) );
        etEndereco = (EditText) ( findViewById(R.id.etEndereco) );

        btOk = (Button) ( findViewById(R.id.btOk) );
        btOk.setOnClickListener(this);

        btCancelar = (Button) ( findViewById(R.id.btCancelar) );
        btCancelar.setOnClickListener(this);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu)
    {
        getMenuInflater().inflate(R.menu.activity_icar, menu);
        return true;
    }
}